package cn.enjoy.tool.utils.select;

/**
 * @author K
 * @date 2020/12/16 15:10
 */
public class SelectorTest {

    /**
     * 1、selector.test先进入BranchBuilder.of()方法，把tester、factory临时存入Branch中
     * 2、创建好branch后，进行test后面的判断，当调用branch的tester.test(param)时，才真正定义好函数（执行x==1判断）。
     * 3、再继续判断tester.test(param)，通过就真正给factory函数赋值，回来拿 x -> "1"(但是没有计算)。继续后面的操作。
     * 4、最后.or(2) 里面判断是否selected，选中就执行factory函数，没有就拿or里面传的参数
     */
    public static void main(String[] args) {
        Selector<Integer, String> selector = TypeConverts.use(1);
        String result = selector.test(BranchBuilder.<Integer, String>of(x -> x == 1).then(x -> "1"))
                .or("2");

        Selector<String, Integer> selector2 = TypeConverts.use("1");
        TypeConverts<String, Integer> converts = new TypeConverts<>();
        Integer result2 = selector2.test(converts.contains("1").then(x -> 1))
                .or(2);

        System.out.println();
    }


}
